#ifndef NODO_H_
#define NODO_H_

#include "RegistroArbol.h"
#include <vector>
#include <string>
#include "../Entidades/IEntidad.h"
#include "../Entidades/Utils.h"
#include <sstream>

using namespace std;
using namespace Entidades;

namespace Arboles {

class Nodo: public IEntidad {

private:

	unsigned int nivel;
	unsigned int numeroNodo;
	unsigned int capacidadMinima;
	unsigned int capacidadMaxima;
	vector<RegistroArbol*>* registros;

protected:

	Nodo(unsigned int capacidadMinima, unsigned int capacidadMaxima);

public:

	unsigned int getNivel() const;
	unsigned int getNumeroNodo() const;
	vector<RegistroArbol*>* getRegistros() const;
	unsigned int getCapacidadMinima() const;
	unsigned int getCapacidadMaxima() const;
	void setNivel(unsigned int nivel);
	void setNumeroNodo(unsigned int numeroNodo);

	virtual Utils::ResultadoOperacionArbol agregar(RegistroArbol* registro) = 0;
	virtual Utils::ResultadoOperacionArbol remover(RegistroArbol* registro) = 0;

	virtual void hidratarse(char* buffer, unsigned int tamanioDelBuffer) = 0;
	virtual char* construirBuffer() = 0;
	virtual unsigned int getTamanioDelBuffer() = 0;
	virtual void marcarComoBorrado();

	virtual ~Nodo();
};

}

#endif
